﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Coffee.Lists
{
    public partial class Lst_UnitRate : DevExpress.XtraEditors.XtraForm
    {
        cls_UnitRate cls = new cls_UnitRate();
        Lists.Lst_Unit unit = new Lst_Unit();

        DataTable DT_Unit = new DataTable();

        public Lst_UnitRate()
        {
            InitializeComponent();
        }

        private void Lst_UnitRate_Load(object sender, EventArgs e)
        {
            try
            {
                grid.SetData(cls.GetAll());
                DT_Unit = unit.GetAll();

                iControls.Uti.SetDropDown(grid, DT_Unit.Copy(), "FUID", "Name", "ID", "Code#Name", "Mã#Tên ĐVT", "");
                iControls.Uti.SetDropDown(grid, DT_Unit.Copy(), "TUID", "Name", "ID", "Code#Name", "Mã#Tên ĐVT", "");

                grid.AppendMenu(barDel);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private bool IsValid(DataTable Data)
        {
            foreach (DataRow row in Data.Rows)
            {
                if (TSoft.Cvert.ToDecimal(row["rate"], 0) < 0)
                {
                    MessageBox.Show("Số lượng quy đổi đơn vị tính : " + TSoft.Cvert.ToDecimal(row["rate"], 0).ToString() + " không hợp lệ.",
                        "Thông báo.", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return false;
                }

                if (TSoft.Cvert.ToInt32(row["FUID"], 0) == TSoft.Cvert.ToInt32(row["TUID"], 0))
                {
                    MessageBox.Show("Đơn vị quy đổi từ " + GetUnitName(TSoft.Cvert.ToInt32(row["FUID"], 0)) + " sang đơn vị " + GetUnitName(TSoft.Cvert.ToInt32(row["TUID"], 0)) +
                        " không thể cùng 1 đơn vị.", "Thông báo.", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return false;
                }

                DataRow[] rS = Data.Select("FUID=" + TSoft.Cvert.ToInt32(row["FUID"], 0) + " and TUID=" + TSoft.Cvert.ToInt32(row["TUID"], 0));
                if (!object.Equals(rS, null) && rS.Length > 1)
                {
                    MessageBox.Show("Đơn vị quy đổi từ " + GetUnitName(TSoft.Cvert.ToInt32(row["FUID"], 0)) + " sang đơn vị " + GetUnitName(TSoft.Cvert.ToInt32(row["TUID"], 0)) +
                        " không thể có 2 giá trị quy đổi.", "Thông báo.", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return false;
                }
            }
            return true;
        }

        private string GetUnitName(int Id)
        {
            DataRow[] rS = DT_Unit.Select("ID=" + Id);
            if (!object.Equals(rS, null) && rS.Length == 1)
                return TSoft.Cvert.ToString(rS[0]["Name"], "");
            return "";
        }

        private void btSave_Click(object sender, EventArgs e)
        {
            try
            {
                DataTable Data = (DataTable)grid.DataSource;
                if (Data == null || Data.Rows.Count <= 0) return;
                if (!IsValid(Data)) return;

                cls.Update(ref Data);
                btSave.Enabled = false;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void btClose_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void view_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
        {
            btSave.Enabled = true;
        }

        private void view_InitNewRow(object sender, DevExpress.XtraGrid.Views.Grid.InitNewRowEventArgs e)
        {
            btSave.Enabled = true;
        }

        private void Lst_UnitRate_Resize(object sender, EventArgs e)
        {
            btSave.Left = this.Width / 2 - btSave.Width - 5;
            btClose.Left = this.Width / 2 + 5;
        }

        private void barDel_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            if (MessageBox.Show("Bạn có chắc chắn muốn xóa dòng dữ liệu này không ?", "Xác nhận !",
                MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.No) return;

            DataRow row = view.GetFocusedDataRow();
            if (object.Equals(row, null)) return;
            cls.DeleteRow(row);
            view.DeleteSelectedRows();
        }
    }
}
